feat(onboarding): redesign onboarding v2 page#5593
feat(onboarding): redesign onboarding v2 page#5593tsahimatsliah wants to merge 29 commits intomainfrom
Conversation
…arch field Introduce the onboarding redesign page and add a layout-level toggle to hide the header search field so onboarding can use a cleaner, focused header without CSS workarounds. Co-authored-by: Cursor <cursoragent@cursor.com>
- Mobile feed cards use flat list mode (full width, no bg, no radius) - Desktop card limit set to 18, mobile to 10 with progressive fade-out - Add dark gradient overlay with progressive blur (mask-image) behind the personalization panel so feed cards fade naturally underneath - Restore sticky scroll behavior so panel pins at center of viewport - Sidebar fully disabled with low opacity, grayscale, and no interaction - All modals use z-modal to render above header (login/signup blocked) - Body scroll locked while any modal is open - GitHub import modal compacted: smaller orb, 2-col seniority grid, tighter spacing, close button inside card - Section titles set to white with larger typography Co-authored-by: Cursor <cursoragent@cursor.com>
Improve onboarding-v2 engagement and conversion UX by adding live feed ticker behavior, tightening hero/panel layouts, and refining GitHub/AI onboarding CTAs and copy. Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
Add logo with login/signup buttons for mobile, tone down glow intensity, simplify tag pill animations, and tighten spacing. Co-authored-by: Cursor <cursoragent@cursor.com>
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
|
@claude Review the PR. |
|
Claude finished @tsahimatsliah's task in 10m 57s —— View job PR Review & Build Fix
Build FixTwo ESLint errors were found that caused the Vercel build to fail:
Fix committed:
Code ReviewThe feature is visually impressive but the implementation has several concerns worth addressing in follow-up: Critical — DOM Mutation Anti-patternsLive engagement ticker mutates the DOM directly ( // ❌ Current approach
const label = document.createElement('label');
label.htmlFor = btnId;
wrapper.appendChild(label);
// ✅ Better: track counters in React state and render themArchitecture3540-line single-file component — The entire page — state, business logic, all UI sub-flows, and ~670 lines of global CSS — lives in one file. Per the CLAUDE.md philosophy of pragmatic iteration, this will be hard to maintain or A/B test. The distinct flows (GitHub import, AI setup, extension promo, confetti, signup chooser) could each be extracted into focused components. ~670-line GitHub orb visualization is copy-pasted 3× — The animated orb with rotating rings, incoming particles, and center icon appears in the personalization panel (×2) and the import overlay. Extract to a shared GitHub icon SVG path duplicated ~5× — Should be extracted as a shared Design System ViolationsHardcoded hex colors in inline styles ( // ❌ Hardcoded
bg-[#0e1217]
background: 'rgba(168,85,247,0.06)'
// ✅ Use design tokens
bg-background-default
bg-accent-onion-default/6Logic
Shared ChangesThe SummaryThe build fix is pushed. The two ESLint errors were the root cause of Vercel's failure. The review findings above are improvements worth tracking — the DOM mutation ticker is the most important to address before this goes to high traffic. |
…fix ESLint build errors - Remove unused `panelShadowOpacity` variable that was flagged by @typescript-eslint/no-unused-vars - Replace `for...of` loop in `findCounterIn` with `Array.prototype.find()` to satisfy airbnb no-restricted-syntax rule Co-authored-by: Tsahi Matsliah <tsahimatsliah@users.noreply.github.com>
|
@claude dix all issues and make sure all are green. |
|
Claude finished @tsahimatsliah's task in 12m 20s —— View job All Issues Fixed
Changes (commit
|
…ors, constants - Refactor live engagement ticker floaters from direct DOM manipulation to React state + fixed overlay, eliminating DOM mutations outside React - Scope scroll-reveal MutationObserver from document.body to .onb-feed-stage container to avoid site-wide DOM change listeners - Replace hardcoded bg-[#0e1217] with bg-raw-pepper-90 design system token - Replace rgba(168,85,247,...) hardcoded colors in CSS with color-mix(in srgb, var(--theme-accent-onion-default) N%, transparent) - Remove misleading panelBackdropOpacity = 1 constant, use 1 directly - Add mobileAppUrl constant to shared/lib/constants.ts and use it instead of hardcoding https://app.daily.dev Co-authored-by: Tsahi Matsliah <tsahimatsliah@users.noreply.github.com>
…olor ESLint error bg-[length:200%_auto] in a literal className triggers the no-custom-color rule since it starts with 'bg-' but isn't a design system color token. Move background-size: 200% auto into the .onb-gradient-text CSS class. Co-authored-by: Tsahi Matsliah <tsahimatsliah@users.noreply.github.com>
Fix prettier formatting, nested ternaries, no-void, no-plusplus, unused variable, and styled-jsx unknown property errors in onboarding-v2. Add sidebar disabled state for onboarding flow. Co-authored-by: Cursor <cursoragent@cursor.com>
… builds - Remove unused getExperienceLevelIcon function - Remove void operator from toggleSidebarExpanded (no-void) - Fix i-- to i -= 1 in Fisher-Yates shuffle (no-plusplus) - Add eslint-disable for necessary DOM reflow void expression - Replace nested ternaries with lookup maps and helper variables - Fix array index keys to use stable identifiers (tag.label, s.delay) - Add eslint-disable for styled-jsx react/no-unknown-property - Apply Prettier formatting and Tailwind class ordering fixes Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Flatten the conditional className expression to match Prettier formatting so shared lint and CI build pass. Co-authored-by: Cursor <cursoragent@cursor.com>
…eat/redesign-onboarding
- Fix unused variable warnings from removed pre-return computed vars - Fix `? (` missing ternary else branch introduced during merge - Fix Prettier formatting in SidebarDesktop.tsx Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…eat/redesign-onboarding
…eat/redesign-onboarding
…ct alignment and live stream effect Made-with: Cursor
…and concurrent streams Made-with: Cursor
Made-with: Cursor
Made-with: Cursor
Adjust onboarding v2 engagement and modal UI details so counters align correctly, transitions feel natural, and the extension promo content spacing/typography matches the intended design. Made-with: Cursor
Refine the onboarding GitHub setup bullets with shorter, clearer copy, tighter spacing, and shared icon components so the cards match the existing onboarding visual style. Made-with: Cursor
|
@claude review the PR. |
|
Claude finished @tsahimatsliah's task in 10m 33s —— View job PR Review & Build Fix
Build Fix SummaryFive categories of errors were breaking the Vercel build:
Code ReviewHigh — Fragile event delegation hijacking (
|
- Run prettier to fix 151 formatting violations - Remove unused TAG_TREND_LABELS constant - Fix TypeScript error: window narrowed to never in else-branch of requestIdleCallback in check; use ReturnType<typeof setTimeout> and plain setTimeout - Fix TypeScript error: redundant signupContext !== 'github' check after isAiSetupContext narrows type to 'ai' | 'manual' - Fix 2 Tailwind classnames-order warnings (max-warnings 0) Co-authored-by: Tsahi Matsliah <tsahimatsliah@users.noreply.github.com>
|
@claude review the pr again |
|
Claude finished @tsahimatsliah's task in 3m 5s —— View job PR Review
SummaryThe build is currently green. The shared component changes (
|
|
@claude fix all |
|
Claude finished @tsahimatsliah's task in 9m 26s —— View job All Issues Fixed
Changes SummaryH1 — Engagement animation DOM mutations refactored
H2 — MutationObserver feedback loop broken
H3 — querySelectorAll scoped to feed
M1 — Signup interception no longer relies on textContent
M2 — Body overflow preserved
L2 — FooterWrapper uses constant
|
H1: Refactor engagement animation DOM mutations
- Replace direct floater DOM creation (document.createElement) with
React state (liveFloaters) rendered in a fixed-position overlay
- Replace `wrapperEl.style.position = 'relative'` direct style mutation
with a CSS class `onb-eng-pos-relative`
- Replace `offsetWidth` forced synchronous reflow with a write-only
`style.animationName = 'none'` + requestAnimationFrame approach
- Clear liveFloaters on animation effect cleanup to prevent stale
floaters persisting when modals open/close
H2: Fix MutationObserver feedback loop
- Change `subtree: true` to `subtree: false` so only direct article
additions to the feed container trigger observeFeedArticles, not
every span/label the animation appends inside articles
H3: Scope querySelectorAll to feed container
- Change `document.querySelectorAll('article')` to
`.onb-feed-stage article` to avoid matching articles in modals
or other page sections
M1: Replace fragile textContent signup interception
- Add `data-header-signup` marker to LoginButton's sign-up button
- Replace textContent matching in onboarding-v2 with dataset check
(`'headerSignup' in trigger.dataset`) — immune to copy changes
M2: Preserve body overflow before overriding
- Store and restore `document.body.style.overflow` via a ref so
other utilities (e.g., useLazyModal) that also set overflow are
not silently clobbered
L2: Use constant for /onboarding-v2 pathname in FooterWrapper
- Add `onboardingV2Path` constant to shared/lib/constants.ts
- Use it in FooterWrapper.tsx instead of a hardcoded string literal
Co-authored-by: Tsahi Matsliah <tsahimatsliah@users.noreply.github.com>
|
@claude make sure the build is working and all vercel and circleci are green |
|
Claude finished @tsahimatsliah's task in 5m 7s —— View job Build Fixed ✓
Vercel should now build successfully. CircleCI only lints |
… errors Co-authored-by: Tsahi Matsliah <tsahimatsliah@users.noreply.github.com>
Summary
Test plan
Made with Cursor
Preview domain
https://feat-redesign-onboarding.preview.app.daily.dev